package cn.bonoon.kernel.menus;

import javax.persistence.Query;

import org.springframework.beans.BeansException;


/**
 * <pre>
 * 系统平台的上下文，可以通过这个接口，访问系统平台的定义、属性、方法等，这个应该是一次性的，初始化处理结束了，这个对应也就不再需要了
 * </pre>
 * @author jackson
 *
 */
public interface PlatformContext{
	
	/** 访问路径和静态资源的路径是两个不一样的 */
	String path(String... path);
	
	/** 文件一个资源文件，这个资源可能被定义在资源服务器上的；可能是非本服务器上的资源文件 */
	String resource(String path);
	
	void add(AbstractMenuable item);
	
	boolean add(ParentContainer parent, DescribeDefinitionImpl item);
	
	void add(String href, AbstractMenuable item);
	
	void add(TabItemDefinition item);
	
	void add(TabsDefinition item);
	
	StyleDefinitionImpl getStyle();
	
	/** 把ID与这个上下文的ID进行组合 */
	String combine(String arg, String... args);
	
	/** 统一使用这个方法来生成菜单的ID */
	String idGenerate(String sid);
	
	/** 生成一个唯一的值 */
	String orderGenerate();
	
	String xpathGenerate(String parentXpath);
	
	ServerResourceResolver getResourceResolver();
	
	/** 获取选中图标的样式 */
	String iconCheckable(boolean checked);
	
	/** 由这个方法统一生成导航栏；果需要修改样式，可以直接在这个方法里添加处理代码 */
	MenuNavigation navigateGenerate(MenuNavigation parent, ItemableDefinition item);
	
	/** 取得帮助文档所存储的根目录 */
	DescribeContext describeContext();
	
	<T> T bean(String name, Class<T> requiredType) throws BeansException;

	/** 数据库访问的能力 */
	Query sqlQuery(String sql);
	
	Query hqlQuery(String hql);
}
